<?php

    // подцепляем наш сайт к системе, для того, чтобы система могла работать с нами
    $mikron->Site = new sevenchances();
    
    /*
        Мы выслали тебе электронное сообщение на адрес lenar2003@mail.ru.
        Для ввода и подтверждения нового пароля следуй инструкциям, приведенным в письме.
    */

    $mikron->Modules->LoadModule('market');

    // класс сайта
    class sevenchances // extends mikron_site // implements mikron_site
    {
        private $allow_play = null;
        public $isNewVersion = true;
        public $Version = 4;

        function __construct()
        {
            global $mikron;
            $mikron->addmenu("Сайт/Автоматизация/Проверить письма", "/email.php");
            $mikron->Schema->Add(dirname(__FILE__).'/reklama.xml', 'Спонсорство');
            $mikron->Handlers->AddToStringHandler('ToString_Function', Array('MIKRON_COMMENT'), $this);
            $mikron->Handlers->AddToStringHandler('ToString_Function', Array('SPONSOR_PROGRAM'), $this);
            $mikron->Applications->Add($this);
        }

        /* Удаление рекламы пользователя */
        function delete_reklama($parameters)
        {
            global $mikron;
            if(!array_key_exists('id', $parameters))
            {
                return null;
            }
            $mikron->Page->StartBody();
            $id = (int)$parameters['id'];
            try
            {
                $p = $mikron->Queries->Query('SPONSOR_PROGRAM', $id, new Criterion('user', $mikron->Users->CurrentUser()->id()));
                if($p->count() == 1)
                {
                    $p = $p->fetch();
                    $p->state->value = 3;
                    $p->Save();
                }
            }
            catch(Exception $ex)
            {
                
            }
        }
        
        public function remove_user_from_friends($parameters)
        {
            global $mikron;
            if(!$mikron->Users->Logged())
            {
                return false;
            }
            if(!array_key_exists('id', $parameters))
            {
                return false;
            }
            $cr = new Criteria();
            $cr->add(new Criterion('entity', 'T_USER'));
            $cr->add(new Criterion('entityid', (int)$parameters['id']));
            $cr->add(new Criterion('user', $mikron->Users->CurrentUser()->id()));
            $qr = $mikron->Queries->Delete('MIKRON_FAVOURITE', $cr);
            return $qr == 1;
        }
        
        public function delete_my_message($parameters)
        {
            global $mikron;
            if(!$mikron->Users->Logged())
            {
                return false;
            }
            if(!array_key_exists('id', $parameters))
            {
                return false;
            }
            $cr = new Criteria();
            $cr->add(new Criterion('entity', 'user'.$mikron->Users->CurrentUser()->user->login->value));
            $cr->add(new Criterion('id', (int)$parameters['id']));
            $qr = $mikron->Queries->Delete('MIKRON_COMMENT', $cr);
            return $qr == 1;
        }

        /* Удаление партнерской программы пользователя */
        function delete_partner_program($parameters)
        {
            global $mikron;
            if(!array_key_exists('id', $parameters))
            {
                return null;
            }
            $id = (int)$parameters['id'];
            $mikron->Page->StartBody();
            try
            {
                $p = $mikron->Queries->Query('PARTNER_PROGRAM', $id, new Criterion('user', $mikron->Users->CurrentUser()->id()));
                if($p->count() == 1)
                {
                    $mikron->EntityManager->DeleteEntity('PARTNER_PROGRAM', $id, true);
                }
            }
            catch(Exception $ex)
            {
                
            }
        }

        public function draw_user_programs($parameters)
        {
            global $mikron;
            $programs = $parameters['programs'];
            $viewuser = $parameters['viewuser'];
            $buttons = true;
            $public = false;
            $viewlogin = $viewuser->login->value;
            if(array_key_exists('public', $parameters))
            {
                $public = $parameters['public'];
            }
            if(array_key_exists('buttons', $parameters))
            {
                $buttons = (int)$parameters['buttons'] == 1;
            }
            $tab4 = new html_table(1, 'firsttableontablist', '100%', 0, 0);
            foreach($programs as $prog)
            {
                if($prog->moderated->value == 2 || !$public)
                {
                    $tab4->newcol();
                        $tab6 = new html_table(1, null, null, 0, 8);
                        $tab6->newcol(null, false, false, null, 'user_program');
                            $tab5 = new html_table(1, null, '100%', 2, 0);
                            $tab5->newcol(null, true);
                                $link = htmlspecialchars($prog->link->value);
                                echo sprintf('<a href="%s">%s</a>', $link, $link);
                                if(!$public)
                                {
                                    switch($prog->moderated->value)
                                    {
                                        case 1:
                                            echo ' <font color="red">(пока не проверено администрацией)</font>';
                                            break;
                                        case 4:
                                            echo ' <font color="red">(не принят администрацией)</font>';
                                            break;
                                        case 2:
                                            echo ' <font color="green">(подтверждено администрацией)</font>';
                                            break;
                                    }
                                }
                            $tab5->newcol(null, false, null, null, null, null, null, null);
                                echo htmlspecialchars($prog->description->value);
                            if($buttons)
                            {
                            $tab5->newcol(null, false, 'right', null, null, null, null, null);
                                if($mikron->Users->ItsMe($viewuser))
                                {
                                    ?>
                                    {{iconlink href="?application=sevenchances&method=delete_partner_program&id=<?php echo $prog->id; ?>"
                                    iconclass="delete_icon" title="Удалить партнерскую программу" text=" Удалить" confirm="Вы действительно хотите удалить партнерскую программу?"}}
                                    <?php
                                }
                                else
                                {
                                    ?>{{MIKRON_UPVOTING entity="PARTNER_PROGRAM"
                                    id=<?php echo $prog->id; ?>
                                    favourite=0
                                    upiconclass="uprateicon_class"
                                    favouriteclass="favouriteicon_class"
                                    upiconclass_disabled="uprateicon_class_disabled"
                                    favouriteclass_disabled="favouriteicon_class_disabled"
                                    }}<?php
                                }
                            }
                        $tab5->end();
                    $tab6->end();
            }
            }
            $tab4->end();
        }

        function view_user_programs($parameters)
        {
            global $mikron;
            $user = $mikron->Users->CurrentUser()->user;
            $viewuser = $parameters['viewuser'];
            $viewlogin = $viewuser->login->value;
            if(!array_key_exists('public', $parameters))
            {
                $parameters['public'] = false;
            }
            $public = $parameters['public'];
            $cr = new Criteria();
            if($public)
            {
                $cr->add(new Criterion('moderated', 2));
            }
            $cr->add(new Criterion('user', $viewuser->id));
            $qr = $mikron->Queries->QueryAsArray('PARTNER_PROGRAM', null, $cr);
            if(count($qr) < 1)
            {
                echo 'У пользователя '.$viewlogin.' нет приглашений.';
            }
            else
            {
                if($viewuser->id != $mikron->Users->CurrentUser()->id())
                {
                    echo sprintf('<h1>Пользователь «%s» приглашает Вас в следующие партнерские программы:</h1>', $viewlogin);
                }
                $parameters['programs'] = $qr;
                $this->draw_user_programs($parameters);
            }
        }

        // Схемы сайта
        function Schemas()
        {
            $ret = Array();
            // файл схемы для текущего сайта
            $ret[] = Array("file"=>dirname(__FILE__)."/schema.xml", "name"=>"Схема текущего сайта");
            return $ret;
        }

        // Вызывается при обновлении сайта
        function Setup()
        {
            global $mikron;
            // добавление пункта меню в главное меню админки
            // $mikron->addmenu("Сайт/Автоматизация/Проверить письма", "/mikron/sites/7chances2/email.php");
            // $mikron->Schema->Add($schema['file'], $schema['name']) ;
            $mikron->addmenu("Сайт/Автоматизация/Проверить купоны", "/sms_billing.php");
        }

        // Вызывается из процедуры $mikron->Page->StartBody();
        function main()
        {
            require_once(dirname(__FILE__).'/gameform.inc');
        
        }
        
        function openlink($parameters)
        {
            if(array_key_exists('link', $parameters))
            {
               global $mikron;
               $mikron->Tools->GoToPage($parameters['link']);
            }
        }

        function ToString_Function(& $object)
        {
            global $mikron;
            switch(get_class($object))
            {
                case 'SPONSOR_PROGRAM':
                    echo '<table class="sponsor_program_public"><tr><td>';
                        $link = '/?application=sevenchances&method=openlink&link='.$object->link->value;
                        echo sprintf('<a href="%s">', $link);
                        $mikron->Tools->ShowPicture($object->picture->value, $object->title->value, 'left', 100, '/images/noprogramphoto.png', 'sponsor_program_photo');
                        echo $object->title->value;
                        echo '</a><br />';
                        echo $object->text->value;
                    echo '</td></tr></table>';
                    break;
                case 'MIKRON_COMMENT':
                    $author = $object->author->value;
                    $dt = strtotime($object->dt->value);
                    $date = MikronDateTime::BeautifulDate($dt).' в '.date($mikron->Constants->TimeShortFormat, $dt);
                    $tab1 = new html_table(2, null, '100%', 4, 0);
                        $tab1->newcol(null, false, null, null, null, '1%');
                            $mikron->Tools->ShowPicture('/images/nophoto.gif', $object->author->value->login->value, null, 48);
                        $tab1->newcol(null, false, null, null, null, '99%', 'top');
                            $tab2 = new html_table(1, null, '100%', 0, 0);
                                $tab2->newcol(null, false, 'left');
                                    echo UserClass::ProfileLink($object->author->value, true, $object->author->value->login->value), ' ', '<font class="hiddentext">'.$date.'</font>';
                                    if($object->entity->value == 'user'.$mikron->Users->CurrentUser()->user->login->value)
                                    {
                                        echo ' <a onclick="return confirm(\'Вы действительно хотите удалить сообщение?\');" href="/?application=sevenchances&method=delete_my_message&id='.$object->id.'"
                                        style="background-color: #ffd; color: #fa0; " class="hiddentext">Удалить</a>';
                                    }
                                    $tab2->newcol(htmlspecialchars($object->comment->value));
                            $tab2->end();
                    $tab1->end();
                    break;
            }
            return false;
        }

        function getSettings()
        {
            global $mikron;
            $sf = $mikron->Queries->Query('SETTINGSFORM');
            if($sf->count() > 0)
            {
                $sf = $sf->fields();
            }
            else
            {
                $sf = new SETTINGSFORM();
            }
            return $sf;
        }

        function AllowPlay($game, $max_count = 1)
        {
            if(is_null($this->allow_play))
            {
                $this->CheckAllowPlay($game, $max_count);
            }
            return $this->allow_play;
        }

        function CheckAllowPlay($game, $max_count = 1)
        {

            global $mikron;

            $hide_message = isset($_GET['lose']) || isset($_GET['win']);

            $dtfilter = date('Y-m-d 00:00:00');
            $error_string = null;
            $is_premium = $mikron->ACL->hasRole('premiumaccount');

            /**
            * 0 - хороший игрок
            * 1 - не РФ
            * 2 - уже сыграл максимальное кол-во раз
            * 3 - этот ip адрес уже играл сегодня
            * 4 - поддиапазон играл совсем недавно (30 мин назад)
            */
            $ret = 0;

            if($is_premium)
            {
                $max_count = 1;
            }

            if($ret == 0)
            {
                /**
                * проверка по кол-ву игр текущим аккаунтом
                */
                $cr = new Criteria();
                $cr->Add(new Criterion('game', $game->id));
                $cr->Add(new Criterion('dt', $dtfilter, CR_MOREOREQUAL));
                $cr->Add(new Criterion('user', $mikron->Users->CurrentUser()->user->id));
                $log = $mikron->Queries->Query('PLAYLOG', null, $cr);
                $dif = $log->count() < $max_count;
                if(!$dif)
                {
                    $ret = 2;
                    $error_string = "К сожалению, на нашем проекте можно играть 1 раз в течение суток. Если же Вы хотите просто расслабиться, то советуем Вам <a href=\"http://partners.livegames.ru/cgi-bin/in/in.cgi?a=220&s=929&p=37\">поиграть</a> в увлекательные игры от LiveGames.";
                }
            }

            // !Премиум + !РФ
            if(!$is_premium && ($ret == 0))
            {
                $city = getCity();
                $dif = !is_null($city) && ($city != 'Unknown');
                if(!$dif)
                {
                    $ret = 1;
                    $ip = $mikron->Users->CurrentUser()->ip();
                    $error_string = 'Для Вас возможность играть в наши игры доступна 
                                    только с <a href="/market/premiumaccount/">премиум-аккаунтом</a>,
                                    т.к. Вы не являетесь жителем РФ.';
                }
            }

            /**
            * проверка по точному ip-адресу
            */
            if(($ret == 0) && !$is_premium) // && !$mikron->ACL->hasRole('premiumaccount'))
            {
                $cr = new Criteria();
                $cr->Add(new Criterion('game', $game->id));
                $cr->Add(new Criterion('dt', $dtfilter, CR_MOREOREQUAL));
                $cr->Add(new Criterion('ip', $mikron->Users->CurrentUser()->ip()));
                $log = $mikron->Queries->Query('PLAYLOG', null, $cr);
                $dif = $log->count() < $max_count;
                if(!$dif)
                {
                    $ret = 3;
                    $t1 = time();
                    $t2 = strtotime(date('d.m.Y 00:00:00'));
                    $t2 = MikronDateTime::DateAdd('d', 1, $t2);
                    $timeout = MikronDateTime::DateDiff('s', $t1, $t2);
                    $timeout = round($timeout/60, 0);
                    $timeout_hours = floor($timeout / 60);
                    $timeout_min = $timeout % 60;
                    $error_string = "В данный момент для Вас возможность играть не доступна.
                    В следующий раз Вы сможете сыграть только через <font class=\"smsfields\">$timeout_hours час. $timeout_min мин.</font>";
                }
            }

            /**
            * проверка по поддиапазону ip-адресов
            */
            if(($ret == 0) && !$is_premium)
            {
                $ip = $mikron->Users->CurrentUser()->ip();
                $ipe = explode('.', $ip);
                $ipe[3] = '%';
                $ip = implode('.', $ipe);
                $cr = new Criteria();
                $cr->Add(new Criterion('game', $game->id));
                $cr->Add(new Criterion('dt', $dtfilter, CR_MOREOREQUAL));
                $cr->Add(new Criterion('ip', $ip, CR_LIKE));
                $playlogs = $mikron->Queries->Query('PLAYLOG', null, $cr);
                $more = $playlogs->count() > $max_count;
                if($more)
                {
                    $t1 = time();
                    while($last_log = $playlogs->fetch())
                    {
                        $t1 = strtotime($last_log->dt->value);
                    }
                    $timeout = (30*60) - MikronDateTime::DateDiff('s', $t1, time());
                    $timeout_min = floor($timeout / 60);
                    $timeout_sec = $timeout % 60;
                    if($timeout > 0)
                    {
                        $ret = 4;
                        $error_string = "В данный момент для Вас возможность играть не доступна.
                        Вы сможете сыграть через <font class=\"smsfields\">$timeout_min мин. $timeout_sec сек.</font>";
                    }
                }
            }

            if(($ret == 2) && !$hide_message)
            {
                ?>{{nicewindow style=help caption=Внимание}}
                <?php echo $error_string; ?>
                {{/nicewindow}}<?php
            }

            $this->allow_play = $ret;
            return $ret;
        }

    }

    function Top10Page($parameters)
    {
        global $mikron;
        $count = 7;
        if(array_key_exists('count', $parameters))
        {
            $count = (int)$parameters['count'];
        }
        echo $mikron->Cache->TimedFunctionContent('top'.$count, 'getTop10Page', 300, $parameters);
    }

    function getTop10Page($parameters)
    {
        $top_count = 7;
        if(array_key_exists('count', $parameters))
        {
            $top_count = (int)$parameters['count'];
        }
        global $mikron;
        ?>
            <!-- TOP-10 -->
            <table width="100%" cellpadding="2" cellspacing="0" border="0" style="margin-top: 1em; ">
            <tr><td valign="top">
                <h1>ТОП-<?php echo $top_count; ?>* победителей</h1>
                <?php
                    $users_wins = Array();
                    $wins = $mikron->Queries->Query('T_USER', null, new Criterion('winamount', 0, CR_MORE), '`winamount` DESC', '0,'.$top_count, null, null, Array('login', 'winamount'));
                    while($win = $wins->fetch())
                    {
                        $amount = $win->winamount->value;
                        $user = $win->login->value;
                        if(!array_key_exists($user, $users_wins))
                        {
                            $users_wins[$user] = 0;
                        }
                        $users_wins[$user] += $amount;
                    }
                    $count = 0;
                    $t = new html_table(null, 'table4', '100%', 0, null, Array('Сумма', 'Логин'));
                    foreach($users_wins as $login => $amount)
                    {
                        $amount = round($amount/100, 2).' руб.';
                        $t->newcol($amount);
                        $t->newcol($login);
                        $count++;
                        if($count == $top_count)
                        {
                            break;
                        }
                    }
                    $t->end();
                ?>
            </td>
            <td valign="top">
                <h1>ТОП-<?php echo $top_count; ?>* последних выигрышей</h1>
                <?php
                    $wins = $mikron->Queries->Query('T_WIN', null, null, null, '0,'.$top_count);
                    if($wins->count() < 1)
                    {
                        echo 'Нет данных.';
                    }
                    else
                    {
                        $t = new html_table(null, 'table4', '100%', 0, null, Array('Сумма', 'Логин', 'Игра', 'Дата'));
                        while($win = $wins->fetch())
                        {
                            $amount = $win->amount->value;
                            $amount = round($amount/100, 2).' руб.';
                            $t->newcol($amount);
                            $t->newcol($win->cabinet->value->login->value);
                            $t->newcol($win->game->value->DisplayName());
                            $dt = $win->dt->value;
                            $dt = MikronDateTime::BeautifulDate(strtotime($dt));
                            $t->newcol($dt);
                        }                
                        $t->end();  
                    }
                ?>
            </td></tr>
            </table>
            <font size="-1" color="aaaaaa">* ТОП-<?php echo $top_count; ?> обновляются каждые 5 минут.</font>
        <?php
    }

?>